package com.fand.platform.configuration.dao;

import java.util.List;
import java.util.Map;

import com.fand.dto.PaginationDto;
import com.fand.platform.configuration.dto.VariableDto;
import com.fand.platform.configuration.dto.VariableLoDto;

/**
 * 变量
 * 
 * @author yaoHT
 * 
 */
public interface VariableDao {
	String BEAN_ID = "com.fand.platform.configuration.dao.VariableDao";

	/**
	 * 插入:变量
	 * 
	 * @param insertVariable
	 *            变量对象
	 * 
	 * @param insertProperties
	 *            插入属性名集合
	 * 
	 * @return 影响行数
	 */
	int insertVariableBy1(VariableDto insertVariable, String... insertProperties);

	/**
	 * 插入:变量
	 * 
	 * @param insertVariable
	 *            变量对象
	 * 
	 * @return 影响行数
	 */
	int insertVariableBy1_1(VariableDto insertVariable);

	/**
	 * 插入:变量
	 * 
	 * @param insertVariable
	 *            变量对象
	 * 
	 * @return 影响行数
	 */
	int insertVariableBy2(VariableDto insertVariable);

	/**
	 * 删除:变量
	 * 
	 * @param deleteVariable
	 *            变量对象
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 影响行数
	 */
	int deleteVariableBy1(VariableDto deleteVariable, String... whereEqProperties);

	/**
	 * 删除:变量
	 * 
	 * @param deleteVariable
	 *            变量对象
	 * 
	 * @return 影响行数
	 */
	int deleteVariableBy1_1(VariableDto deleteVariable);

	/**
	 * 删除:变量
	 * 
	 * @param deleteVariable
	 *            变量对象
	 * 
	 * @return 影响行数
	 */
	int deleteVariableByIds(VariableDto deleteVariable);

	/**
	 * 更新:变量
	 * 
	 * @param updateVariable
	 *            变量对象
	 * 
	 * @param updateProperties
	 *            更新的属性名集合
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 影响行数
	 */
	int updateVariableBy1(VariableDto updateVariable, String[] updateProperties, String... whereEqProperties);

	/**
	 * 更新:变量
	 * 
	 * @param updateVariable
	 *            变量对象
	 * 
	 * @return 影响行数
	 */
	int updateVariableBy1_1(VariableDto updateVariable);

	/**
	 * 更新:变量
	 * 
	 * @param updateVariable
	 *            变量对象
	 * 
	 * @return 影响行数
	 */
	int updateVariableBy2(VariableDto updateVariable);

	/**
	 * 查询:变量
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectVariable
	 *            变量对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 返回对象
	 */
	<R> R selectVariableBy1ForObject(Class<R> requiredType, VariableDto selectVariable, String objectId,
			String... whereEqProperties);

	/**
	 * 查询:变量
	 * 
	 * @param selectVariable
	 *            变量对象
	 * 
	 * @return 返回对象
	 */
	Integer selectVariableByTypeIdEqCodeNqIdForInteger(VariableDto selectVariable);

	/**
	 * 查询:变量
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectVariable
	 *            变量对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @return 返回对象
	 */
	<R> R selectVariableBy2ForObject(Class<R> requiredType, VariableDto selectVariable, String objectId);

	/**
	 * 查询:变量
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectVariable
	 *            变量对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 变量对象集合
	 */
	<R> List<R> selectVariableBy1ForObjectList(Class<R> requiredType, VariableDto selectVariable, String objectId,
			String... whereEqProperties);

	/**
	 * 查询:变量
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectVariable
	 *            变量对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @return 变量对象集合
	 */
	<R> List<R> selectVariableBy1_1ForObjectList(Class<R> requiredType, VariableDto selectVariable, String objectId);

	/**
	 * 查询:变量
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectVariable
	 *            变量对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @return 变量对象集合
	 */
	<R> List<R> selectVariableBy2ForObjectList(Class<R> requiredType, VariableDto selectVariable, String objectId);

	/**
	 * 查询:变量
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectVariable
	 *            变量对象
	 * 
	 * @param selectProperties
	 *            查询的属性名集合
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 返回对象
	 */
	<R> R selectVariableBy1ForMappedObject(Class<R> mappedClass, VariableDto selectVariable,
			String[] selectProperties, String... whereEqProperties);

	/**
	 * 查询:变量
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectVariable
	 *            变量对象
	 * 
	 * @return 返回对象
	 */
	<R> R selectVariableBy1_1ForMappedObject(Class<R> mappedClass, VariableDto selectVariable);

	/**
	 * 查询:变量
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectVariable
	 *            变量对象
	 * 
	 * @return 返回对象
	 */
	<R> R selectVariableByIdForMappedObject(Class<R> mappedClass, VariableDto selectVariable);

	/**
	 * 查询:变量
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectVariable
	 *            变量对象
	 * 
	 * @param selectProperties
	 *            查询的属性名集合
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 变量对象集合
	 */
	<R> List<R> selectVariableBy1ForMappedObjectList(Class<R> mappedClass, VariableDto selectVariable,
			String[] selectProperties, String... whereEqProperties);

	/**
	 * 查询:变量
	 * 
	 * @param mappedClass
	 *            返回类型
	 * @param typeCo
	 *            类型编号
	 * 
	 * @return 变量对象集合
	 */
	<R> List<R> selectVariableByTypeCoForMappedObjectList(Class<R> mappedClass, String typeCo);

	/**
	 * 查询:变量
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectVariable
	 *            变量对象
	 * 
	 * @return 变量对象集合
	 */
	<R> List<R> selectVariableBy2ForMappedObjectList(Class<R> mappedClass, VariableDto selectVariable);

	/**
	 * 分页:变量
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param paginationVariable
	 *            变量对象
	 * 
	 * @return 变量分页对象
	 */
	<R> PaginationDto<R> paginationVariableBy1ForMappedObjectList(final Class<R> mappedClass,
			VariableDto paginationVariable);

	/**
	 * 分页
	 * 
	 * @param paginationVariable
	 *            变量对象
	 * 
	 * @return 变量分页对象
	 */
	PaginationDto<Map<String, Object>> paginationVariableBy1ForMapList(VariableDto paginationVariable);

	/**
	 * 插入:变量日志
	 * 
	 * @param insertVariableLo
	 *            变量日志对象
	 * 
	 * @param insertProperties
	 *            插入属性名集合
	 * 
	 * @return 影响行数
	 */
	int insertVariableLoBy1(VariableLoDto insertVariableLo, String... insertProperties);

	/**
	 * 删除:变量日志
	 * 
	 * @param deleteVariableLo
	 *            变量日志对象
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 影响行数
	 */
	int deleteVariableLoBy1(VariableLoDto deleteVariableLo, String... whereEqProperties);

	/**
	 * 更新:变量日志
	 * 
	 * @param updateVariableLo
	 *            变量日志对象
	 * 
	 * @param updateProperties
	 *            更新的属性名集合
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 影响行数
	 */
	int updateVariableLoBy1(VariableLoDto updateVariableLo, String[] updateProperties, String... whereEqProperties);

	/**
	 * 查询:变量日志
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectVariableLo
	 *            变量日志对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 返回对象
	 */
	<R> R selectVariableLoBy1ForObject(Class<R> requiredType, VariableLoDto selectVariableLo, String objectId,
			String... whereEqProperties);

	/**
	 * 查询:变量日志
	 * 
	 * @param requiredType
	 *            返回类型
	 * 
	 * @param selectVariableLo
	 *            变量日志对象
	 * 
	 * @param objectId
	 *            返回对象标识
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 变量日志对象集合
	 */
	<R> List<R> selectVariableLoBy1ForObjectList(Class<R> requiredType, VariableLoDto selectVariableLo,
			String objectId, String... whereEqProperties);

	/**
	 * 查询:变量日志
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectVariableLo
	 *            变量日志对象
	 * 
	 * @param selectProperties
	 *            查询的属性名集合
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 返回对象
	 */
	<R> R selectVariableLoBy1ForMappedObject(Class<R> mappedClass, VariableLoDto selectVariableLo,
			String[] selectProperties, String... whereEqProperties);

	/**
	 * 查询:变量日志
	 * 
	 * @param mappedClass
	 *            返回类型
	 * 
	 * @param selectVariableLo
	 *            变量日志对象
	 * 
	 * @param selectProperties
	 *            查询的属性名集合
	 * 
	 * @param whereEqProperties
	 *            条件为等于的属性名集合
	 * 
	 * @return 变量日志对象集合
	 */
	<R> List<R> selectVariableLoBy1ForMappedObjectList(Class<R> mappedClass, VariableLoDto selectVariableLo,
			String[] selectProperties, String... whereEqProperties);
}